package com.huida.app.java8.reduce;

import java.util.Arrays;
import java.util.List;

/**
 * @author wangzhuangzhuang
 * @DESC: Stream.reduce用来实现集合元素的规约
 * reduce函数有三个参数：
 *  - Identity标识： 一个元素，它是规约操作的初始值，如果流为空，则为默认结果；
 *  - Accumulator累加器： 具有两个参数的函数，规约运算的部分结果和流的下一个元素；
 *  - Combiner和兵器（可选）：当规约并行化时，或当累加器参数的类型与累加器实现的类型不匹配时，用合并规约操作的部分结果的函数
 * @date 2022-01-24 12:58
 */
public class ReduceDemo {
	private static void integerReduceDemo(){
		List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6);
//		int result = nums.stream()
//				.reduce(0, (subtotal, element) -> subtotal + element);
//		System.out.println(result); // 21

		int result = nums
				.stream()
				.reduce(0, Integer::sum);
		System.out.println(result); // 21
	}
}